package pe.edu.upc.dew.Grupo1.dao;

import java.util.List;

import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;

import pe.edu.upc.dew.Grupo1.model.Funcion;

public class FuncionDaoJdbc extends SimpleJdbcDaoSupport implements FuncionDao{

	@Override
	public void insert(Funcion funcion) {
		getSimpleJdbcTemplate().update("insert into funcion(CodigoFuncion,Horario,CodigoSala,CodigoPelicula) values(?,?,?,?)",
				funcion.getCodigoFuncion(),funcion.getHorario(),funcion.getSala().getCodigoSala(),funcion.getPelicula().getCodigoPelicula());
	}

	@Override
	public Funcion getFuncionPorCodigo(int codigo) {
		return getSimpleJdbcTemplate().
		queryForObject("SELECT CodigoFuncion,Horario,CodigoSala,CodigoPelicula,Estado FROM `funcion` WHERE CodigoFuncion = ?", 
				new FuncionRowMapper(), codigo);
	}

	@Override
	public void deleteFuncionPorCodigo(int codigo) {
		getSimpleJdbcTemplate().update("delete from `funcion` where CodigoFuncion=?",codigo);
	}

	@Override
	public void updatePorCodigo(Funcion funcion) {
		getSimpleJdbcTemplate().
		update("update `funcion` set Horario=?,CodigoSala=?,CodigoPelicula=?,Estado=? where CodigoFuncion=?", 
				funcion.getHorario(),funcion.getSala().getCodigoSala(),funcion.getPelicula().getCodigoPelicula(),funcion.getEstado(),funcion.getCodigoFuncion());
	}

	@Override
	public List<Funcion> getFuncionesPorPelicula(int codigoPelicula) {
		return getSimpleJdbcTemplate().
		query("SELECT F.CodigoFuncion,F.Horario,F.CodigoSala,F.CodigoPelicula,F.Estado ,S.Nombre AS Sala,P.Nombre AS Pelicula FROM `funcion` AS F INNER JOIN sala AS S ON F.CodigoSala = S.`CodigoSala`  INNER JOIN LOCAL AS L ON L.`CodigoLocal` = S.`CodigoLocal`  INNER JOIN Pelicula AS P ON F.CodigoPelicula = P.CodigoPelicula WHERE  ? = 0 OR CodigoFuncion = ?", 
				new FuncionPeliculaRowMapper(),codigoPelicula,codigoPelicula);
	}
	
	@Override
	public List<Funcion> getFuncionesPorEstado(boolean estado) {
		return getSimpleJdbcTemplate().
		query("select CodigoFuncion,Horario,CodigoSala,CodigoPelicula,Estado from `funcion` where estado=?", new FuncionRowMapper(), estado);
	}

	@Override
	public int getConteoFunciones() {
		return getSimpleJdbcTemplate().queryForInt("select count(*) from `funcion`");
	}
	
	@Override
	public List<Funcion> getFuncionesPorPeliculaLocal(Funcion funcion) {
		return getSimpleJdbcTemplate().
		query("SELECT DISTINCT F.* FROM funcion AS F INNER JOIN sala AS S ON F.`CodigoSala` = S.`CodigoSala` INNER JOIN LOCAL AS L ON L.`CodigoLocal` = S.`CodigoLocal` WHERE CodigoPelicula=? AND L.`CodigoLocal` = ? ", 
				new FuncionRowMapper(),funcion.getPelicula().getCodigoPelicula(), funcion.getSala().getLocal().getCodigoLocal());
	}

}
